package com.wangp.mywrite.inwork.pattern;

import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

/***
 * @author wangpeng
 * @since 2022-02-28  10:35
 */
public class InitData {

    /*** 文件名列表 */
    public static final ImmutableList<String> FILE_NAME_LIST = ImmutableList.<String>builder()
            .add("sales1.xls")
            .add("orders3.xls")
            .add("sales2.xls")
            .add("sales3.xls")
            .add("apac1.xls")
            .add("europe2.xls")
            .add("sam.xls")
            .add("na1.xls")
            .add("na2.xls")
            .add("sa2.xls")
            .add("ca1.xls")
            .build();

    /*** 字母列表 */
    public static final ImmutableList<String> ALPHABET_LIST = ImmutableList.<String>builder()
            .add("A").add("B").add("C").add("D").add("E").add("F").add("G")
            .add("H").add("I").add("J").add("K").add("L").add("M").add("N")
            .add("O").add("P").add("Q").add("R").add("S").add("T")
            .add("U").add("V").add("W").add("X").add("Y").add("Z")
            .add("a").add("b").add("c").add("d").add("e").add("f").add("g")
            .add("h").add("i").add("j").add("k").add("l").add("m").add("n")
            .add("o").add("p").add("q").add("r").add("s").add("t")
            .add("u").add("v").add("w").add("x").add("y").add("z")
            .build();


    /*** A-z之间符号列表 */
    public static final ImmutableList<String> SYMBOL_IN_A_z_LIST = ImmutableList.<String>builder()
            .add("[").add("\\").add("]").add("^").add("_").add("`")
            .build();

    /*** 模拟 csv 数据 */
    public static final String CSV_MOCK = ""
            + "\"101\",\"Ben\",\"Fort\"\n"
            + "\"102\",\"Jim\",\"James\"\n"
            + "\n"
            + "\"103\",\"Roberta\",\"Robertson\"\n"
            + "\"104\",\"   Bob\",\"Boson\"";

    /*** 邮箱列表 */
    public static final ImmutableList<String> EMAIL_LIST = ImmutableList.<String>builder()
            .add("abed.com")
            .add("abcd@com")
            .add("@qq.com")
            .add("abcd@qq.com")
            .add("abcd@qq")
            .add("abcd@qq.net")
            .add("_abcd@qq.net")
            .add("_abcd@_qq.net")
            .add("849183239@qq.com.")
            .add("849183239@qq.com")
            .add("a@bcd.com.cn")
            .add("a.b@bcd.com")
            .add(".b@bcd.com")
            .add("b@bcd..com")
            .build();

    /*** 地址列表 */
    public static final ImmutableList<String> URL_LIST = ImmutableList.<String>builder()
            .add("http://www.akulaku.com")
            .add("https://www.akulaku.com")
            .add("http?://www.akulaku.com")
            .add("http\\://www.akulaku.com")
            .add("http/://www.akulaku.com")
            .add("httpss://www.akulaku.com")
            .build();

    /*** 手机号列表 */
    public static final ImmutableList<String> PHONE_LIST = ImmutableList.<String>builder()
            .add("10000")
            .add("10086")
            .add("10010")
            .build();

    /*** ip 地址列表 */
    public static final ImmutableList<String> IP_LIST = ImmutableList.<String>builder()
            .add("1.1.1.1")
            .add("2.2.2.2")
            .add("1.1.1.1.1")
            .add("1.1.1")
            .add("10.10.1.1")
            .add("192.168.1.1")
            .add("1.1.0.1")
            .add("1.1.255.1")
            .add("1.1.256.1")
            .add("1.255.255.255")
            .add("1.-1.1.1")
            .build();

    /*** 时间列表 */
    public static final ImmutableList<String> DATE_LIST = ImmutableList.<String>builder()
            .add("1990.01.02")
            .add("19990.12.01")
            .add("1990.1.1")
            .add("1990.1.12")
            .add("1990-0-1")
            .add("1990-12-12")
            .add("1990/1/1")
            .add("1990/13/1")
            .build();

    /*** 北美手机号列表 */
    public static final ImmutableList<String> NA_PHONE_LIST = ImmutableList.<String>builder()
            .add("123-456-7890")
            .add("555-456-7890")
            .add("(923)456-7890")
            .add("(555) 456-7890")
            .add("(223)-456-7890")
            .add("(423-456-7890")
            .add("5234567890")
            .add("723 456 7890")
            .build();

    /*** 北美邮编列表 */
    public static final ImmutableList<String> NA_POST_CODE_LIST = ImmutableList.<String>builder()
            .add("11111")
            .add("22222")
            .add("33333-")
            .add("44444-4444")
            .add("5555")
            .add("6666-66666")
            .build();

    /**
     * 根据正则表达式筛选数据
     *
     * @param list  列表
     * @param regex 正则
     * @return 结果
     */
    public static List<String> filterByRegexPattern(ImmutableList<String> list, String regex) {
        return list.stream().filter(str -> str.matches(regex)).collect(Collectors.toList());
    }

    /**
     * 移除正则表达式匹配的内容
     *
     * @param before 移除前
     * @param regex  正则
     * @return 结果
     */
    public static String removeContentByRegexPattern(String before, String regex) {
        System.out.println("处理前字符串为： \n" + before);
        String after = before.replaceAll(regex, "");
        System.out.println("\n处理后字符串为：\n" + after);
        return after;
    }


    private static final String SPACE = " ";

    /**
     * 空格切割句子，并解析单个单词是否匹配正则
     *
     * @param sentence 句子
     * @param reg      正则
     * @return 匹配的单词
     */
    @Deprecated
    public static List<String> parseSentenceByReg(String sentence, String reg) {
        List<String> res = new ArrayList<>();

        for (String s : sentence.split(SPACE)) {
            if (s.matches(reg)) {
                res.add(s);
            }
        }
        return res;
    }

    /**
     * 正则替换
     *
     * @param list  列表
     * @param regex 正则
     * @return 结果
     */
    public static List<String> replaceByReg(List<String> list, String regex, String replaceReg) {
        List<String> res = new ArrayList<>();
        list.forEach(e -> res.add(e.replaceAll(regex, replaceReg)));
        return res;
    }

    /**
     * 正则替换
     *
     * @param content 内容
     * @param regex   正则
     * @return 结果
     */
    public static String replaceByReg(String content, String regex, String replaceReg) {
        return content.replaceAll(regex, replaceReg);
    }


    /**
     * 查找符合正则内容
     *
     * @param content 文本
     * @param reg     正则
     * @return 符合条件内容
     */
    public static List<String> find(String content, String reg) {
        List<String> res = new ArrayList<>();
        Pattern pattern = Pattern.compile(reg);
        Matcher matcher = pattern.matcher(content);
        while (matcher.find()) {
            res.add(matcher.group());
        }
        return res;
    }

    /**
     * 查找符合正则内容
     *
     * @param contentList 文本
     * @param reg         正则
     * @return 符合条件内容
     */
    public static List<String> find(List<String> contentList, String reg) {
        List<String> res = new ArrayList<>();
        Pattern pattern = Pattern.compile(reg);
        for (String content : contentList) {
            Matcher matcher = pattern.matcher(content);
            while (matcher.find()) {
                res.add(matcher.group());
            }
        }
        return res;
    }
}
